package rules

// APIResult API检查结果
type APIResult struct {
	Conclusion APIConclusion // 结论：通过、失败、危险
	Details    []string      // 详细信息
}

// APIConclusion API检查结论枚举
type APIConclusion int

const (
	APIConclusionPass    APIConclusion = iota // 通过
	APIConclusionFail                         // 失败
	APIConclusionWarning                      // 危险
)

// String 返回结论的字符串表示
func (c APIConclusion) String() string {
	switch c {
	case APIConclusionPass:
		return "通过"
	case APIConclusionFail:
		return "失败"
	case APIConclusionWarning:
		return "危险"
	default:
		return "未知"
	}
}

// APIValidator API检查器接口
type APIValidator interface {
	// Validate 执行API检查
	Validate(data DDLCheckData) APIResult
	// Name 返回检查器名称
	Name() string
	// IsEnabled 检查是否启用
	IsEnabled() bool
}

// CreateValidatorByName 通过名称创建API检查器
func CreateValidatorByName(name string) APIValidator {
	switch name {
	case "语法检查器":
		return NewSyntaxValidatorEnabled(true)
	case "安全检查器":
		return NewSecurityValidatorEnabled(true)
	case "性能检查器":
		return NewPerformanceValidatorEnabled(true)
	case "贸易2.0项目SQL检查":
		return NewExternalHTTPValidatorEnabled(true)
	default:
		return nil
	}
}

// GetAllValidatorNames 获取所有可用的检查器名称
func GetAllValidatorNames() []string {
	return []string{
		"语法检查器",
		"安全检查器",
		"性能检查器",
		"贸易2.0项目SQL检查",
	}
}

// ValidatorConfig 检查器配置
type ValidatorConfig struct {
	Name     string                 `json:"name"`
	Enabled  bool                   `json:"enabled"`
	Settings map[string]interface{} `json:"settings"`
}

// APICheckerConfig API检查器通用配置
type APICheckerConfig struct {
	Enabled  bool
	Timeout  int // 秒
	Endpoint string
	ApiKey   string
}

// BaseAPIChecker 基础API检查器，提供通用功能
type BaseAPIChecker struct {
	config   APICheckerConfig
	name     string
	settings map[string]interface{}
}

// NewBaseAPIChecker 创建基础API检查器
func NewBaseAPIChecker(name string, config APICheckerConfig) *BaseAPIChecker {
	return &BaseAPIChecker{
		config:   config,
		name:     name,
		settings: make(map[string]interface{}),
	}
}

// NewBaseAPICheckerWithSettings 创建带有设置的基础API检查器
func NewBaseAPICheckerWithSettings(name string, config APICheckerConfig, settings map[string]interface{}) *BaseAPIChecker {
	return &BaseAPIChecker{
		config:   config,
		name:     name,
		settings: settings,
	}
}

// GetSettings 获取设置
func (b *BaseAPIChecker) GetSettings() map[string]interface{} {
	return b.settings
}

// GetSetting 获取特定设置
func (b *BaseAPIChecker) GetSetting(key string, defaultValue interface{}) interface{} {
	if value, exists := b.settings[key]; exists {
		return value
	}
	return defaultValue
}

// Name 返回检查器名称
func (b *BaseAPIChecker) Name() string {
	return b.name
}

// IsEnabled 检查是否启用
func (b *BaseAPIChecker) IsEnabled() bool {
	return b.config.Enabled
}

// GetConfig 获取配置
func (b *BaseAPIChecker) GetConfig() APICheckerConfig {
	return b.config
}
